import java.util.ArrayList;
import java.util.Scanner;

class Main {

		public static void main(String[] a) {
		
			Scanner sc = new Scanner(System.in);
			long n = sc.nextLong();
			System.out.println( fbnq(n) );

		}
		
    //斐波那契（dynamic programming）
    private static long fbnq(long i) {
    	assert i > 0;
    	ArrayList<Long> arr = new ArrayList<>();
    	arr.add(1L);
    	arr.add(1L);
    	if( i < 3 ) return 1L;
    	
    	for(int j = 0; j < i-2; j++) {
    		arr.add(j+2, ( arr.get(j)%10007 + arr.get(j+1)%10007) % 10007 );
    	}
    	
    	return arr.get(arr.size()-1);
    }

}


// 记忆化递归  dp是记忆化递归的逆过程 差别就在于：递归层级过多系统栈容易溢出，而dp是迭代 所以没有这个顾虑；
//public class BEGIN_4 {
	
//		public static void main(String[] a) {
//		
////			Scanner sc = new Scanner(System.in);
////			long n = sc.nextLong();
//
//			long s = System.nanoTime();
//			System.out.println(fbnq(100000,new int[101]));
//			long e = System.nanoTime();
//			System.out.println( (e-s)/1000000000.0 +"s");
//		}
//		
//		private static int fbnq(int n, int[] memo){
//			
//			if(n == 1 || n == 2){
//				return 1;
//			}
//			
//			if(memo[n] > 0)
//				return memo[n];		//因为这里的递归是分叉且顺序执行的，在第一个叉执行过程中进行数据缓存，可以减少后续分叉的重复性运算；
//			
//			memo[n] = ( fbnq(n-1, memo)%10007 + fbnq(n-2, memo)%10007 ) % 10007 ;
//			
//			return  memo[n];
//		}
//}




